
/*
 *
 * CODE COPIED FROM:
 * http://code.google.com/p/phoside/source/browse/trunk/PHOSIDE/src/phoside/ui/util/JTabbedPaneWithCloseIcons.java?r=111
 * 18/06/2010 - 14:40
 *
 */

package view;

import controler.Action;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.Icon;
import javax.swing.JTabbedPane;

public class JTabbedPaneWithCloseIcons extends JTabbedPane implements MouseListener {

  public JTabbedPaneWithCloseIcons() {
    super();
    addMouseListener(this);
  }

  @Override
  public void addTab(String title, Component component) {
    this.addTab(title, null, component);
  }

  @Override
  public void addTab(String title, Icon extraIcon, Component component) {
    super.addTab(title, new CloseTabIcon(extraIcon), component);
  }

  public void mouseClicked(MouseEvent e) {
    int tabNumber = getUI().tabForCoordinate(this, e.getX(), e.getY());
    if (tabNumber < 0) {
      return;
    }
    Rectangle rect = ((CloseTabIcon) getIconAt(tabNumber)).getBounds();
    if (rect.contains(e.getX(), e.getY())) {
      //the tab is being closed
      this.removeTabAt(tabNumber);

      //ATTENTION: Static Acess Remove Data method, remove without
      Action.removeDataAt(tabNumber);
    }
  }

  public void mouseEntered(MouseEvent e) {
  }

  public void mouseExited(MouseEvent e) {
  }

  public void mousePressed(MouseEvent e) {
  }

  public void mouseReleased(MouseEvent e) {
  }
}

class CloseTabIcon implements Icon {

  private int x_pos;
  private int y_pos;
  private int width;
  private int height;
  private Icon fileIcon;

  public CloseTabIcon(Icon fileIcon) {
    this.fileIcon = fileIcon;
    width = 16;
    height = 16;
  }

  public void paintIcon(Component c, Graphics g, int x, int y) {
    this.x_pos = x;
    this.y_pos = y;

    Color col = g.getColor();

    g.setColor(Color.black);
    int y_p = y + 2;
    g.drawLine(x + 1, y_p, x + 12, y_p);
    g.drawLine(x + 1, y_p + 13, x + 12, y_p + 13);
    g.drawLine(x, y_p + 1, x, y_p + 12);
    g.drawLine(x + 13, y_p + 1, x + 13, y_p + 12);
    g.drawLine(x + 3, y_p + 3, x + 10, y_p + 10);
    g.drawLine(x + 3, y_p + 4, x + 9, y_p + 10);
    g.drawLine(x + 4, y_p + 3, x + 10, y_p + 9);
    g.drawLine(x + 10, y_p + 3, x + 3, y_p + 10);
    g.drawLine(x + 10, y_p + 4, x + 4, y_p + 10);
    g.drawLine(x + 9, y_p + 3, x + 3, y_p + 9);
    g.setColor(col);
    if (fileIcon != null) {
      fileIcon.paintIcon(c, g, x + width, y_p);
    }
  }

  public int getIconWidth() {
    return width + (fileIcon != null ? fileIcon.getIconWidth() : 0);
  }

  public int getIconHeight() {
    return height;
  }

  public Rectangle getBounds() {
    return new Rectangle(x_pos, y_pos, width, height);
  }
}

/*
 *
 * CODE COPIED FROM:
 * http://code.google.com/p/phoside/source/browse/trunk/PHOSIDE/src/phoside/ui/util/JTabbedPaneWithCloseIcons.java?r=111
 * 18/06/2010 - 14:40
 *
 */
